// tcp.cpp
#include "tcp.h"
#include "..\..\login.h" // 包含登录窗口的头文件
#include "public.h"
#pragma comment(lib, "ws2_32.lib") // 添加库链接指令
tcp::tcp() : QObject(nullptr)      // 显式调用QObject的构造函数
{

    isConnected = false;
    qDebug() << "连接服务器" << endl;

    pTcpSocket = new QTcpSocket();
    qDebug() << "连接服务器2" << endl;

    // 2 连接服务器"192.168.124.28"// 家里的 IP 地址
    pTcpSocket->connectToHost("192.168.70.230", 9999); // 教室 IP 地址
    if (pTcpSocket->waitForConnected())
    {
        qDebug() << "连接服务器success" << endl;
        connect(pTcpSocket, &QTcpSocket::readyRead, this, [=]()
                {
                    QByteArray recv_Msg = pTcpSocket->readAll();
                    // 去掉空格
                    QString res = QString::fromUtf8(recv_Msg);
        // 将response转换为char数组
        QByteArray byteArray = res.toUtf8(); // 或者使用 res.toLocal8Bit()
        char *response = byteArray.data();
        qDebug() << "返回值监听:" << response << endl;
        if (response[3] == '0')
        {
            int count = 0;
            // 调用函数拆分字符串
            const char delim = '^';
            int arrayLength = 0;
            char **tokens = splitStringCorrect(response, delim, &arrayLength);
            for (int i = 0; i < arrayLength; i++)
            {
                printf("tokens[%d]: %s\n", i, tokens[i]);
            }
            printf("url:%s,total:%s,id:%s, gender:%s, age:%s, avatar_id:%s, account:%s, niceName:%s, signature:%s\t",
                   tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[6], tokens[7], tokens[8]);
            uid = atoi(tokens[2]);
            sex = atoi(tokens[3]);
            headImgType = atoi(tokens[8]);
            userName = tokens[6];
            niceName = tokens[7];
            emit loginSuccess();
            home->updateSideBar();
        }
        if (response[3] == '1')
        {
            messageListDatas.clear();
            int count = 0;
            // 调用函数
            char **result = splitStringByDelimiter(response, &count);
            qDebug() << count << "----获取用户列表接口" << endl;
            // 打印结果
            for (int i = 0; i < count; i++)
            {
                qDebug() << "Result[" << i << "]:" << result[i];
                messageListStruct msg = parseResponse(result[i]);
                messageListDatas.emplace_back(
                    1001,                // url: 消息URL
                    count,               // total: 消息总数
                    0,                   // isActive: 消息是否激活（1表示激活，0表示未激活）
                    msg.groupId ? 1 : 0, // isGroup: 是否为群组消息（1表示是，0表示否）
                    msg.Id,              // Id: 消息ID
                    msg.groupId ? 1 : 0, // isGroupMessage: 是否为群组消息（1表示是，0表示否）
                    1,                   // isRead: 消息是否已读（1表示已读，0表示未读）
                    msg.groupId,         // groupId: 群组ID
                    msg.userId,          // userId: 用户ID
                    msg.groupName,       // groupName: 群组名称
                    msg.userName,        // userName: 用户名
                    msg.message,         // message: 消息内容
                    time(nullptr)        // timestamp: 消息时间戳（当前时间）
                );
            }
            home->MessageListUpdate();
        }
        if (response[3] == '2' || response[3] == '3')
        {
            qDebug() << "获取会话消息接口" << endl;
            if (response[5] == '0')
            {
                chatWindowListDatas.clear();
            }
            else
            {
                int charCount = 0;
                char **CharResult = splitStringByDelimiter(response, &charCount);
                qDebug() << "获取会话消息接口charCount:" << charCount << endl;
                chatWindowListDatas.clear();
                for (int i = 0; i < charCount; i++)
                {
                    chatWindowListStruct charmsg = parseCharResponse(CharResult[i]);
                    qDebug() << "total:" << charCount << "GroupId:" << charmsg.GroupId << "friendId:" << charmsg.friendId << "userId:" << charmsg.userId << "userName:" << charmsg.userName << "niceName:" << charmsg.niceName << "message:" << charmsg.message;

                    // 把msg添加到InfoListData中
                    chatWindowListDatas.emplace_back(
                        1002,                // url
                        charCount,           // total
                        charmsg.weCharId,    // weCharId
                        charmsg.GroupId,     // GroupId
                        charmsg.friendId,    // friendId
                        charmsg.userId,      // userId
                        charmsg.sex,         // sex
                        charmsg.messageType, // messageType
                        charmsg.userName,    // userName
                        charmsg.niceName,    // niceName
                        charmsg.message,     // message
                        charmsg.format,      // format
                        time(nullptr)        // timestamp
                    );
                }
                qDebug() << "更新窗口" << endl;
                home->ChatWindowUpdate();
            }
        } });
    }
    else
    {
        QMessageBox::question(NULL,
                              "客户端", "连接服务器失败");
    }
}

// 发送请求
int tcp::tcp_send(int i)
{
    QString query;
    if (i == 1000) // 登录
    {
        qDebug() << "账号：" << accountValue << endl;
        qDebug() << "密码：" << passwordValue << endl;
        // 接口id、账号、密码
        query = QString("%1^%2^%3")
                    .arg(1000)           // 接口id
                    .arg(accountValue)   // 账号
                    .arg(passwordValue); // 密码
    }
    if (i == 1001) // 获取用户列表
    {
        // 接口id、 用户id、
        query = QString("%1^%2")
                    .arg(1001) // 接口id
                    .arg(uid); // 接口id
    }

    if (i == 1002) // 获取会话消息
    {
        messageListStruct val = messageListDatas[MessageListActiveIndex];
        qDebug() << "获取会话消息接口---uid：" << val.userId << "----" << val.groupId;
        // 接口id、 用户id、好友id、群id、
        query = QString("%1^%2^%3^%4")
                    .arg(1002)         // 接口id
                    .arg(uid)          // 用户id
                    .arg(val.userId)   // 好友id
                    .arg(val.groupId); // 群id
    }
    if (i == 1003) // 发送会话消息
    {
        messageListStruct val = messageListDatas[MessageListActiveIndex];
        // 接口id、 用户id、好友id、群id、性别、消息类型(1普通，2文件)、用户名、昵称、消息、文件后缀
        query = QString("%1^%2^%3^%4^%5^%6^%7^%8^%9^%10")
                    .arg(1003)           // 接口id
                    .arg(uid)            // 用户id
                    .arg(val.userId)     // 好友id
                    .arg(val.groupId)    // 群id
                    .arg(sex)            // 性别
                    .arg(1)              // 消息类型(1普通，2文件)
                    .arg(userName)       // 用户名
                    .arg(niceName)       // 昵称
                    .arg(charInputValue) // 消息
                    .arg("9999");        // 文件后缀
    }
    // QByteArray byteArray = QString(query).toLocal8Bit();
    QByteArray byteArray = QString(query).toUtf8();
    pTcpSocket->write(byteArray);
    pTcpSocket->waitForBytesWritten();
    qDebug() << "发送请求：" << byteArray << query;
    return 1;
}
